package com.cysyz.json.impl;

import java.util.List;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;

import com.cysyz.json.IJSONGenerator;
import com.cysyz.json.ResultType;
import com.cysyz.json.wraper.JSONWraper;

public class JSONGeneratorImpl implements IJSONGenerator {
	
	private JSONWraper jsonWraper;
	
	public JSONGeneratorImpl() {
		this.jsonWraper = new JSONWraper() {
			
			public String wrapJSON(String json) {
				return json;
			}
		};
	}
	
	public JSONGeneratorImpl(JSONWraper jsonWraper) {
		super();
		this.jsonWraper = jsonWraper;
	}

	public String generateJSON(ResultType result, List<Object> content, JsonConfig jsonConfig) {
		if (jsonConfig == null) {
			jsonConfig = new JsonConfig();  
		}
		jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
		JSONResult jsonResult = new JSONResult(result, content);
		JSONObject jsonObject = JSONObject.fromObject(jsonResult,jsonConfig );
		String returnText = jsonWraper.wrapJSON(jsonObject.toString());
		return returnText;
	}
	
	public String generateJSON(ResultType result, List<Object> content) {
		return this.generateJSON(result, content, null);
	}
}
